package com.springboot.lotterysystem.dao.mapper;

import com.springboot.lotterysystem.dao.dataobject.Encrypt;
import com.springboot.lotterysystem.dao.dataobject.UserDO;
import org.apache.ibatis.annotations.*;

/**
 * Created with IntelliJ IDEA.
 * Description :
 * User: jiume
 * Date: 2025-04-20
 * Time: 17:22
 */
@Mapper
public interface UserMapper {

    /**
     * 查询邮箱绑定的人数
     * @param mail
     * @return
     */
    // count() 是一个聚合函数，用来统计返回结果的数量，即mail有多少条
    // 参数绑定之后，SQL语句中填写的是绑定后的结果
    @Select("select count(*) from user where email = #{email}")
    // 数据库的字段 和 Java实体类的属性 名称不一致，需要手动绑定
    int countByMail(@Param("email") String mail);

    /**
     * 查询手机号绑定的人数
     * @param phoneNumber
     * @return
     */
    // 由于我们实现了Handler类，并重写了BaseHandler方法
    // 因此使用@Param注解绑定之后，无需去指定对应的属性值
    // 而是直接通过重写的方法进行设置了
    @Select("select count(*) from user where phone_number = #{phoneNumber}")
    int countByPhoneNumber(@Param("phoneNumber") Encrypt phoneNumber);

    // 设置自增Id给UserDO对象
    @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
    @Insert("insert into user (user_name, email, phone_number, password, identity)" +
            " values (#{userName}, #{email}, #{phoneNumber}, #{password}, #{identity})")
    void insert(UserDO userDO);
}
